import * as Router from 'koa-router';
import { IRouterContext } from 'koa-router';
import dingTalkApi from 'dingtalk-app/dtalk/DingTalkApi';
import dTalkApi from '../core/dTalkApi';
import dTalkApiUtil from 'dingtalk-app/dtalk/dTalkApiUtil';
import approvalService from '../services/approvalService';
import dataToLeaderService from '../services/dataToLeaderService';
import visitMonthPlanService from '../services/visitMonthPlanService';
import consumerInfoService from '../services/consumerInfoService';
import storeInfoService from '../services/storeInfoService';
import reportFormService from '../services/reportFormService';

//PC端-页面       
let router = new Router();
router.prefix('/api/manage');
//(一)PC端-月计划
//该接口是PC端月计划-待审核页面-----显示待审核数据
router.post('/pcUnapprovalPLan',async(ctx: IRouterContext, next: any)=>{ 
    let user:any=dingTalkApi.decode(ctx.header.authorization)
    let rq:any=ctx.request;
    let res=rq.body;
    let access_token=await dTalkApiUtil.getAccessToken();
    if(!user){
        user=await dTalkApi.getUserDetail(res.userid,access_token)
    }
    let json=await approvalService.listMonthPlanByMonth(user,res.month,access_token); 
    if(json !=null){
        ctx.body=json;
        ctx.status = 200;
    }else{
        ctx.body=null;
    };
    await next()
});

//该接口是PC端月计划-待审核页面----审核结果数据保存
//参数idList:数据_id的列表  result:审核结果 month:月份  leaderId:领导id
router.post('/pcSaveApprovalResult',async(ctx: IRouterContext, next: any)=>{ 
    let rq:any=ctx.request;
    let res=rq.body;
    let access_token=await dTalkApiUtil.getAccessToken();
   await approvalService.saveApprovalResult(res.idList,res.result,res.month,res.leaderId); 
    let json=await approvalService.listMonthPlanByMonth(res.leaderId,res.month,access_token);
    if(json.length !=0){
        ctx.body=json;
        ctx.status = 200;
    }else{
        ctx.body=[];
    };
    await next()
});

//该接口是PC端月计划-月计划页面
router.post('/pcListStatisticalData',async(ctx: IRouterContext, next: any)=>{ 
    let rq:any=ctx.request;
    let res=rq.body;
    let json=await dataToLeaderService.checkAllUserDataByMonth(res.userid,res.month); 
    if(json !=null){
        ctx.body=json;
        ctx.status = 200;
    }
    await next()
});

//该接口是PC端月计划-月计划页面----模糊查询
// month:月份  character:模糊字段
router.post('/pcFuzzySearchPlan',async(ctx: IRouterContext, next: any)=>{ 
    let rq:any=ctx.request;
    let res=rq.body;
    let json=await dataToLeaderService.fuzzySearch(res.userid,res.character); 
    if(json.length>0){
        ctx.body=json;
        ctx.status = 200;
    }else{
        ctx.body=null;
    };
    await next()
});

//该接口是pc端月计划-月计划个人详情页面
router.post('/pcListMonthPlanToLeader',async(ctx: IRouterContext, next: any)=>{ 
    let rq:any=ctx.request;
    let res=rq.body;
    let monthPlanList=await visitMonthPlanService.listMonthPlan2(res.userid,res.month);
    if(monthPlanList !=null){
        ctx.body=monthPlanList;
        ctx.status=200;
    }else{
        ctx.body=null;
    } 
    await next()  
});

//(二)PC端-客户管理-客户
//查询显示某一个月所有的客户信息-----客户管理-所有客户页面
router.post('/pcCheckAllConsumer',async(ctx: IRouterContext, next: any)=>{ 
    let rq:any=ctx.request;
    let res=rq.body;
    let data=await consumerInfoService.checkAllConsumerInfo();
    if(data !=null){
        ctx.body=data;
        ctx.status=200;
    }else{
        ctx.body=[];
    } 
    await next()  
});

//删除客户信息-----客户管理-所有客户页面
router.post('/pcDeleteConsumer',async(ctx: IRouterContext, next: any)=>{ 
    let rq:any=ctx.request;
    let res=rq.body;
    await consumerInfoService.deleteConsumer(res.idList);
    let data=await consumerInfoService.checkAllConsumerInfo();
    if(data !=null){
        ctx.body=data;
        ctx.status=200;
    }else{
        ctx.body=null;
    } 
    await next()  
});

//添加客户信息-----客户管理-所有客户页面
router.post('/pcAddConsumer',async(ctx: IRouterContext, next: any)=>{ 
    let rq:any=ctx.request;
    let res=rq.body;
    //添加客户信息
    let s=await consumerInfoService.addConsumer(res);
    if(s==1){
        ctx.body='该客户已存在';
    }else{
        let data=await consumerInfoService.checkAllConsumerInfo();
        if(data !=null){
            ctx.body=data;
            ctx.status=200;
        }else{
            ctx.body=null;
        } 
    }
    await next()  
});

//根据客户的类型筛选客户-----客户管理-所有客户页面-----------无问题
//typ1:客户类型1|客户类型2|客户类型3|未签约客户|线上客户|音乐专业客户等    month:月份
router.post('/pcCheckConsumerByType',async(ctx: IRouterContext, next: any)=>{ 
    let rq:any=ctx.request;
    let res=rq.body;
    let data=await consumerInfoService.checkConsumerByType(res.type);
    if(data !=null){
        ctx.body=data;
        ctx.status=200;
    }else{
        ctx.body=null;
    } 
    await next()  
});

//模糊搜索-----客户管理-所有客户页面
router.post('/pcfuzzyCheckConsumer',async(ctx: IRouterContext, next: any)=>{ 
    let rq:any=ctx.request;
    let res=rq.body;
    let data=await consumerInfoService.fuzzyCheck(res.type,res.character);
    if(data !=null){
        ctx.body=data;
        ctx.status=200;
    }else{
        ctx.body=null;
    } 
    await next()  
});

//分配客户----客户管理---分配客户页面
//参数:consumerCodeList:客户编码列表    userName:员工姓名  month:月份
router.post('/pcAllocateConsumer',async(ctx: IRouterContext, next: any)=>{ 
    let rq:any=ctx.request;
    let res=rq.body;
   await consumerInfoService.allocate_consumer(res.consumerCodeList,res.userId);
   let data=await consumerInfoService.checkAllConsumerInfo();
    if(data !=null){
        ctx.body=data;
        ctx.status=200;
    }else{
        ctx.body=null;
    } 
    await next()  
});

//筛选已分配与未分配的客户--------客户管理---分配客户页面
//month:月份    character:"已分配"|"未分配"
router.post('/pccheckUnallocatedConsumer',async(ctx: IRouterContext, next: any)=>{ 
    let rq:any=ctx.request;
    let res=rq.body;
    let data=await consumerInfoService.checkUnallocatedConsumer(res.month,res.character);
    if(data !=null){
        ctx.body=data;
        ctx.status=200;
    }else{
        ctx.body=null;
    } 
    await next()  
});

//根据城市与员工名字筛选客户
router.post('/pcSelectConsumerByCityOrEmployeeName',async(ctx: IRouterContext, next: any)=>{ 
    let rq:any=ctx.request;
    let res=rq.body;
    let data=await consumerInfoService.selectConsumerByCityOrEmployeeName(res.character,res.month);
    if(data !=null){
        ctx.body=data;
        ctx.status=200;
    }else{
        ctx.body=null;
    } 
    await next()  
});

//模糊搜索客户----客户管理---分配客户页面
//参数:character:模糊搜索字段    type:城市名称或员工姓名  month:月份
router.post('/pcFusszyCheckAllocateConsumer',async(ctx: IRouterContext, next: any)=>{ 
    let rq:any=ctx.request;
    let res=rq.body;
    let data=await consumerInfoService.fusszyCheckAllocateConsumer(res.character,res.type,res.month);
    if(data !=null){
        ctx.body=data;
        ctx.status=200;
    }else{
        ctx.body=null;
    } 
    await next()  
});


//(三)PC端-客户管理-门店
//查询所有门店信息-----客户管理-所有门店页面
router.post('/pcCheckAllStore',async(ctx: IRouterContext, next: any)=>{ 
    let rq:any=ctx.request;
    let res=rq.body;
    let data=await storeInfoService.checkAllStore();
    if(data !=null){
        ctx.body=data;
        ctx.status=200;
    }else{
        console.log(res.month+'月份无门店信息!!!!!');
        ctx.body=null;
    } 
    await next()  
});

//添加门店信息-----客户管理-所有门店页面
router.post('/pcAddStore',async(ctx: IRouterContext, next: any)=>{ 
    let rq:any=ctx.request;
    let res=rq.body;
   //添加门店信息
   await storeInfoService.addStore(res);
    let data=await storeInfoService.checkAllStore();
    if(data !=null){
        ctx.body=data;
        ctx.status=200;
    }else{
        ctx.body=null;
    } 
    await next()  
});

//删除门店信息-----客户管理-所有门店页面
router.post('/pcDeleteStore',async(ctx: IRouterContext, next: any)=>{ 
    let rq:any=ctx.request;
    let res=rq.body;
    await storeInfoService.deleteStore(res.idList);
    let data=await storeInfoService.checkAllStore();
    if(data !=null){
        ctx.body=data;
        ctx.status=200;
    }else{
        ctx.body=null;
    } 
    await next()  
});

//根据门店等级或门店渠道筛选门店-----客户管理-所有门店页面
router.post('/pcCheckStoreByGradeOrChannel',async(ctx: IRouterContext, next: any)=>{ 
    let rq:any=ctx.request;
    let res=rq.body;
    let data=await storeInfoService.checkStoreByGradeOrChannel(res.type);
    if(data !=null){
        ctx.body=data;
        ctx.status=200;
    }else{
        ctx.body=null;
    } 
    await next()  
});

//模糊搜索-----客户管理-所有门店页面
router.post('/pcfuzzyCheckStore',async(ctx: IRouterContext, next: any)=>{ 
    let rq:any=ctx.request;
    let res=rq.body;
    let data=await storeInfoService.fuzzyCheckStore(res.character,res.type);
    if(data !=null){
        ctx.body=data;
        ctx.status=200;
    }else{
        ctx.body=null;
    } 
    await next()  
});

//所有门店页面---获取门店等级
router.post('/getStoreGrade',async(ctx: IRouterContext, next: any)=>{ 
    let data=await storeInfoService.getStoreGrade();
    if(data.length>0){
        ctx.body=data;
        ctx.status=200;
    }else{
        ctx.body=[];
    } 
    await next()  
});

//所有门店页面---获取门店渠道
router.post('/getStoreChannel',async(ctx: IRouterContext, next: any)=>{ 
    let data=await storeInfoService.getStoreChannel();
    if(data.length>0){
        ctx.body=data;
        ctx.status=200;
    }else{
        ctx.body=[];
    } 
    await next()  
});


//(四)PC端-报表-----------------未做
//(一)出差频率----报表
//参数startDate:开始日期,endDate:结束日期,character:选取的字段  comment:说明//选的哪一个模块
router.post('/pcTravelFrequency',async(ctx: IRouterContext, next: any)=>{ 
    let rq:any=ctx.request;
    let res=rq.body;
    console.log(res,'res_res_res_')
    let data=await reportFormService.getTravelFrequency(res.startDate,res.endDate,res.character,res.comment,res.leaderId);
    if(data.length !=0){
        ctx.body=data;
        ctx.status=200;
    }else{
        ctx.body=[];
    } 
    await next()  
});

//(二)签到率----报表
//参数startDate:开始日期,endDate:结束日期,character:选取的字段  comment:说明//选的哪一个模块
router.post('/pcCheckInRate',async(ctx: IRouterContext, next: any)=>{ 
    let rq:any=ctx.request;
    let res=rq.body;
    console.log(res,'res_res_res_')
    let data=await reportFormService.getCheckInRate(res.startDate,res.endDate,res.character,res.comment,res.leaderId);
    if(data.length !=0){
        ctx.body=data;
        ctx.status=200;
    }else{
        ctx.body=[];
    } 
    await next()  
});

//(三)门店拜访进度----报表
//参数startDate:开始日期,endDate:结束日期,character:选取的字段  comment:说明//选的哪一个模块
router.post('/pcVisitStoreSchadule',async(ctx: IRouterContext, next: any)=>{ 
    let rq:any=ctx.request;
    let res=rq.body;
    console.log(res,'res_res_res_')
    let data=await reportFormService.getVisitStoreSchadule(res.startDate,res.endDate,res.character,res.comment,res.leaderId);
    if(data.length !=0){
        ctx.body=data;
        ctx.status=200;
    }else{
        ctx.body=[];
    } 
    await next()  
});

//(四)已拜访门店拜访达标率------报表
//参数startDate:开始日期,endDate:结束日期,character:选取的字段  comment:说明//选的哪一个模块
router.post('/pcReachVisitedStoreRate',async(ctx: IRouterContext, next: any)=>{ 
    let rq:any=ctx.request;
    let res=rq.body;
    console.log(res,'res_res_res_')
    let data=await reportFormService.getReach_VisitedStoreRate(res.startDate,res.endDate,res.character,res.comment,res.leaderId);
    if(data.length !=0){
        ctx.body=data;
        ctx.status=200;
    }else{
        ctx.body=[];
    } 
    await next()  
});

//(五)新客户拜访达成率----报表
//参数startDate:开始日期,endDate:结束日期,character:选取的字段  comment:说明//选的哪一个模块
router.post('/pcReachNewConsumerRate',async(ctx: IRouterContext, next: any)=>{ 
    let rq:any=ctx.request;
    let res=rq.body;
    console.log(res,'res_res_res_')
    let data=await reportFormService.getReach_NewConsumerRate(res.startDate,res.endDate,res.character,res.comment,res.leaderId);
    if(data.length !=0){
        ctx.body=data;
        ctx.status=200;
    }else{
        ctx.body=[];
    } 
    await next()  
});

//(六)客户拜访达成率---报表
//参数startDate:开始日期,endDate:结束日期,character:选取的字段  comment:说明//选的哪一个模块
router.post('/pcReachConsumerRate',async(ctx: IRouterContext, next: any)=>{ 
    let rq:any=ctx.request;
    let res=rq.body;
    console.log(res,'res_res_res_res_res_')
    let data=await reportFormService.getReachConsumerRate(res.startDate,res.endDate,res.character,res.comment,res.leaderId);
    if(data.length !=0){
        ctx.body=data;
        ctx.status=200;
    }else{
        ctx.body=[];
    } 
    await next()  
});



export default router